Code
##| echo: false##| echo: falseDer Markt für DC-Motoren belief sich im Jahr 2022 auf ca. 20,1 Milliarden US-Dollar und es wurde erwartet, dass sich das Volumen bis 2031 auf 49,3 Milliarden erhöht [1]. Jeder dieser Motoren braucht eine mehr oder weniger komplizierte Ansteuerung. Eine mögliche Ansteuerung soll hier gezeigt werden.
Ziel
Es soll eine Schaltung entworfen werden, welche es erlaubt, einen DC-Motor in folgenden Betriebsarten zu betreiben:
Bei den ersten beiden Punkten soll es möglich sein, die Drehzahl mittels Puls-Weiten-Modulation (PWM) zu ändern.
Lernziele
Hilfestellung
Video: Hierarchisches Design
Altium Hilfe: Multi-sheet & Hierarchical Designs in Altium Designer
Im einfachsten Fall wird die Stromversorgung, welche eine entsprechende Leistung hat, mit einem Schalter eingeschaltet und der Motor dreht sich. Um einen Motor drehzahlgesteuert zu betreiben, bedarf es ein Steuersignal und der entsprechenden Leistung für den Motor. In den meisten Fällen ist es so, dass das Steuersignal selbst nicht ausreichend Leistung hat, da es aus einem Mikrocontroller kommt.
Mit Schaltung Abbildung 3.1 kann ein Motor drehzahlgesteuert betrieben werden. Der MOSFET verstärkt dabei die Leistung des Steuersignales. Die Leistung wird von der Quelle \(U_q\) zur Verfügung gestellt. Allerdings lässt sich dabei die Drehrichtung nicht ändern.
Um die oben geforderten Betriebszustände zu erreichen, bedarf es der H-Brücke, auch Vier-Quadranten-Steller genannt, in Abbildung 5.1.
Für die Erklärung der Funktionsweise werden die MOSFET’s durch gedachte Schalter ersetzt. Dies ist zulässig, da der MOSFET als Schalter betrieben werden kann. Siehe dazu Kapitel 3.1.
\(S_1, S_2, S_ 3\) und \(S_4\) stellen dabei Potentiale dar. Zur Erinnerung, ein MOSFET schaltet, wenn die Spannung zwischen Gate und Source, \(U_{GS}\), die Threshold-Spannung \(U_{GS,Threshold}\) überschreitet.
Der Trick ist, den Stromfluss durch den Motor für Rechtslauf und Linkslauf umzukehren. Dies gelingt wie folgt.
Transistoren \(S_2\) und \(S_3\) müssen durchschalten. Transistoren \(S_1\) und \(S_4\) müssen gesperrt sein.
Transistoren \(S_1\) und \(S_4\) müssen durchschalten. Transistoren \(S_2\) und \(S_3\) müssen gesperrt sein.
Um den Motor zu bremsen, muss er kurzgeschlossen werden. Daraus ergibt sich, dass die Transistoren \(S_2\) und \(S_4\) durchgeschaltet sind und die Transistoren \(S_1\) und \(S_3\) gesperrt sind.
Zunächst muss in der Zuordnungstabelle der Zusammenhang zwischen dem logischen Zustand und dem physikalischen Wert definiert werden.
| Eingang / Ausgang | Bezeichnung | Zuordnung | Beschreibung |
|---|---|---|---|
| Eingang | E … Enable | 0 … Disabled; 1 … Enabled | Damit wird die Schaltung betriebsbereit. Ist Enable deaktiviert, kann an den anderen Eingängen ein beliebiges Signal anliegen, der Motor darf sich trotzdem nicht bewegen. |
| Eingang | B … Break | 0 … Disabled; 1 … Enabled | Aktivierung des Bremsbetriebs. Hat Vorrang über die Richtungswahl. |
| Eingang | D … Direction | 0 … Linkslauf; 1 … Rechtslauf | Gibt die Drehrichtung vor. |
| Eingang | P … PWM | PWM Signal | Gibt die Drehzahl vor. |
| Ausgänge | S1, S2, S3, S4 | 0 … MOSFET aus; 1 … MOSFET ein | Steuersignal für die Transistoren. Diese entsprechen noch nicht dem benötigten Potentialen! |
In der Wahrheitstabelle wird nun der Schaltzustand der Ausgänge in Abhängigkeit der Eingänge definiert. Das PWM Signal soll nur auf die Transistoren T2 und T4 wirken. Die Transistoren T1 und T3 sollen nur durch die Eingänge E, B und D gesteuert werden. In der H-Brücke werden die Transistoren T1 und T3 in der Regel dazu verwendet, die Richtung des Stromflusses und damit die Drehrichtung des Motors zu steuern. Die Transistoren T2 und T4 werden dann mit einem PWM-Signal gesteuert, um die Geschwindigkeit des Motors zu regeln. Die Verwendung von PWM nur für die unteren Transistoren (T2 und T4) hat mehrere Vorteile, darunter eine verbesserte Energieeffizienz, eine reduzierte Wärmeentwicklung und einen besseren Schutz des Motors.
##| echo: false
#| label: #tbl-WahrheitstabelleS1S3
#| tbl-cap: Wahrheitstabelle für Transisoren T1 und T3
import pandas as pd
dfS1S3 = pd.read_csv('HBrücke_WahrheitstabelleS1S3.csv',sep=';')
#display(dfS1S3)
#display(Markdown(dfS1S3.to_markdown(index=False,tablefmt="github", colalign ='center')))
display(Markdown(dfS1S3.to_markdown(index=False,tablefmt="github")))| Enable | Direction | Break | S1 | S3 |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 |
| 0 | 1 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 0 | 0 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 0 | 0 |
##| echo: false
#| label: #tbl-WahrheitstabelleS2S4
#| tbl-cap: Wahrheitstabelle für Transisoren T2 und T4
import pandas as pd
dfS2S4 = pd.read_csv('HBrücke_WahrheitstabelleS2S4.csv',sep=';')
display(Markdown(dfS2S4.to_markdown(index=False,tablefmt="github", colalign ='center')))| PWM | Enable | Direction | Break | S2 | S4 |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 | 0 |
| 0 | 1 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | 0 | 0 |
| 0 | 1 | 1 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 1 | 0 | 0 |
| 1 | 0 | 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 1 | 0 | 0 |
| 1 | 1 | 0 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 | 1 | 1 |
| 1 | 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 | 1 |
Mittels KV-Diagram oder Boolescher Algebra kann aus der Wahrheitstabelle die einfachste Boolesche Gleichung ermittelt werden.
\(\bar{A} = \neg A\)
##| echo: false
from sympy.logic import SOPform
from sympy.logic.boolalg import to_cnf, to_dnf, ANFform
PWM = MySymbol('P',description='PWM Eingang')
Enable = MySymbol('E',description='Enable Eingang')
Break = MySymbol('B',description='Break Eingang')
Direction = MySymbol('D',description='Direction Eingang')
EingaengeS1S3 = [Enable, Direction, Break]
EingaengeS2S4 = [PWM, Enable, Direction, Break]
S1 = MySymbol('S1',description='Steuersignal Transistor 1')
mintermsS1 = dfS1S3[dfS1S3['S1'].isin([1])].iloc[:,0:3].values.tolist()
S1eq = Eq(S1,POSform(EingaengeS1S3, mintermsS1))
#S1eq = Eq(S1,SOPform(EingaengeS1S3, mintermsS1))
display(S1eq)
S3 = MySymbol('S3',description='Steuersignal Transistor 3')
mintermsS3 = dfS1S3[dfS1S3['S3'].isin([1])].iloc[:,0:3].values.tolist()
#S3eq = Eq(S3,POSform(EingaengeS1S3, mintermsS3))
S3eq = Eq(S3,SOPform(EingaengeS1S3, mintermsS3))
display(S3eq)
S2 = MySymbol('S2',description='Steuersignal Transistor 2')
mintermsS2 = dfS2S4[dfS2S4['S2'].isin([1])].iloc[:,0:4].values.tolist()
S2eq = Eq(S2,(POSform(EingaengeS2S4, mintermsS2)))
display(S2eq)
#display(Eq(S2,to_cnf(SOPform(Eingaenge, mintermsS2),simplify=True)))
S4 = MySymbol('S4',description='Steuersignal Transistor 4')
mintermsS4 = dfS2S4[dfS2S4['S4'].isin([1])].iloc[:,0:4].values.tolist()
S4eq = Eq(S4,POSform(EingaengeS2S4, mintermsS4))
display(S4eq)
#display(Eq(S4,SOPform(Eingaenge, mintermsS4)))\(\displaystyle S_{1} = D \wedge E \wedge \neg B\)
\(\displaystyle S_{3} = E \wedge \neg B \wedge \neg D\)
\(\displaystyle S_{2} = E \wedge \left(B \vee P\right) \wedge \left(B \vee \neg D\right)\)
\(\displaystyle S_{4} = E \wedge \left(B \vee D\right) \wedge \left(B \vee P\right)\)
Zur Überprüfung werden aus den Gleichungen die Wahrheitstabellen erstellt und mit den oben definierten Wahrheitstabellen verglichen.
| E | D | B | S1 | S3 |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 |
| 0 | 1 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 | 0 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 0 | 1 | 0 | 0 |
| 1 | 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 0 | 0 |
| P | E | D | B | S2 | S4 |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 | 0 |
| 0 | 1 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | 0 | 0 |
| 0 | 1 | 1 | 1 | 1 | 1 |
| 1 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 1 | 0 | 0 |
| 1 | 0 | 1 | 0 | 0 | 0 |
| 1 | 0 | 1 | 1 | 0 | 0 |
| 1 | 1 | 0 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 | 1 | 1 |
| 1 | 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 | 1 |
Die Tabellen stimmen überein. Die Gleichungen sind somit richtig.
Die Logik kann mit verschiedenen Technologien umgesetzt werden. Hier wurde eine Lösung mittels TTL Gattern gewählt. Die Schaltung ist in Abbildung 5.6 dargestellt. In einer modernen Anwendung würde die Logik mittels Mikrocontroller realisiert werden. Software technisch bieten hier Quartus oder PSoC Creator Lösungen an. In Quartus lässt sich die Logik auch simulieren.
Aus wirtschaftlichen Gründen sollte eine Logikschaltung aus möglichst wenigen verschiedenen Logikgattern bestehen. Es bietet sich an, die Schaltung mit NAND oder NOR Gattern aufzubauen. Aus zeitgründen wird im Moment hier darauf verzichtet. Mit der Regel von DeMorgan kann die Schaltung in die jeweilige schreibweise übergeführt werden. \[\overline{A \land B} = \overline{A} \lor \overline{B}\] \[\overline{A \lor B} = \overline{A} \land \overline{B}\]
Mittels Simulation kann die Funktion der Schaltung überprüft werden. Dazu wird der zeitliche verlauf mit der Wahrheitstabelle verglichen. Stimmen die Signale überein, ist die Schaltung richtig.
Der Signallaufplan passt mit der Wahrheitstabelle überein. Somit ist davon auszugehen, dass die TTL-Schaltung korrekt umgesetzt wurde.
Die H-Brücke besteht aus P-Kanal MOSFETs und N-Kanal MOSFETs. MOSFETs werden über den Potentialunterschied zwischen Gate und Source gesteuert. Bei den N-Kanal MOSFETs T2 und T4 könnte direkt der Ausgang der Logikschaltung verwendet werden, sofern die notwendige Leistung zur Verfügung steht. Bei den P-Kanal MOSFETs T1 und T3 ist dies nicht möglich, da die Logikschaltung nicht das geeignete Potential liefern kann. Die P-Kanal MOSFETs sperren, wenn am Gate dieselbe Spannung anliegt wie am Source Eingang. Sie leiten, wenn am Gate Ground anliegt. Es muss also eine Schaltung entworfen werden, welche die Potentiale anpasst. Aus der obigen Überlegung ergibt sich folgende Anforderung an die Pegelanpassung.
| Ausgang TTL S1 und S3 | Potential am Source Eingang |
|---|---|
| 0 V | \(U_s\) |
| 5 V | 0 V |
Diese Pegelanpassung lässt sich einfach mit OPVs realisieren. Durch die Slew-Rate der OPVs entstehen dabei aber deutliche Verluste bei jedem Schaltvorgang. Für die Funktion und Simulation wird trotz der Nachteile diese Lösung gewählt. Wichtig ist dabei, dass die OPVs Ausgangsspannungen deutlich unter bzw. deutlich über der Threshholdspannung der MOSFETs ausgeben.
Wird eine H-Brücke in der Praxis verwendet, wird eine integrierte oder teilintegrierte Lösung, sogenannte H-Brückentreiber, gewählt. Folgende Lösungen und viele andere von verschiedenen Herstellern, sind verfügbar:
Im Datenblatt der Bauteile sind Anwendungsbeispiele und Application Notes zu finden. Diese sind eine gute Quelle für die Entwicklung der Schaltungen.
Will man nun die Funktion der H-Brücke simulieren, muss die Logikschaltung mit der Pegelanpassung, die H-Brücke und das Motormodel zusammengeführt werden. Die Schaltung ist in Abbildung 5.9 dargestellt. Der Motor kann über das einfache Modell Abbildung 5.10 simuliert werden. Das erweiterte Modell Abbildung 5.11 liefert auch Informationen über die Drehzahl und das Massenträgheitsmoment, damit kann auch der Bremsvorgang betrachtet werden.
Nun können die Betriebszustände simuliert werden. Die Simulation ist in Abbildung 5.12 dargestellt. Die Simulation zeigt, dass die H-Brücke wie gewünscht funktioniert. Die Drehzahl lässt sich mittels PWM verändern. Die Drehrichtung lässt sich mittels Direction ändern. Die Bremsfunktion lässt sich mittels Break aktivieren.
To Be Continued